#include "LinearMath/btSpatialAlgebra.h"
#ifdef __cplusplus
extern "C" {
#endif
btSymmetricSpatialDyad* bullet_NewbtSymmetricSpatialDyad(){
	btSymmetricSpatialDyad* wrap_out = new btSymmetricSpatialDyad();
	return wrap_out;
}

btSymmetricSpatialDyad* bullet_NewbtSymmetricSpatialDyad1(btMatrix3x3* topLeftMat,btMatrix3x3* topRightMat,btMatrix3x3* bottomLeftMat){
	btMatrix3x3 const& c_arg_topLeftMat=(btMatrix3x3 const&)(*topLeftMat);
	btMatrix3x3 const& c_arg_topRightMat=(btMatrix3x3 const&)(*topRightMat);
	btMatrix3x3 const& c_arg_bottomLeftMat=(btMatrix3x3 const&)(*bottomLeftMat);
	btSymmetricSpatialDyad* wrap_out = new btSymmetricSpatialDyad(c_arg_topLeftMat,c_arg_topRightMat,c_arg_bottomLeftMat);
	return wrap_out;
}

void bullet_btSymmetricSpatialDyad_addMatrix(btSymmetricSpatialDyad* c_this,btMatrix3x3* topLeftMat,btMatrix3x3* topRightMat,btMatrix3x3* bottomLeftMat){
	btMatrix3x3 const& c_arg_topLeftMat=(btMatrix3x3 const&)(*topLeftMat);
	btMatrix3x3 const& c_arg_topRightMat=(btMatrix3x3 const&)(*topRightMat);
	btMatrix3x3 const& c_arg_bottomLeftMat=(btMatrix3x3 const&)(*bottomLeftMat);
	c_this->addMatrix(c_arg_topLeftMat,c_arg_topRightMat,c_arg_bottomLeftMat);
}

btMatrix3x3* bullet_btSymmetricSpatialDyad_GetFieldOfM_bottomLeftMat(btSymmetricSpatialDyad* c_this){
	return (btMatrix3x3*)(&c_this->m_bottomLeftMat);
}

btMatrix3x3* bullet_btSymmetricSpatialDyad_GetFieldOfM_topLeftMat(btSymmetricSpatialDyad* c_this){
	return (btMatrix3x3*)(&c_this->m_topLeftMat);
}

btMatrix3x3* bullet_btSymmetricSpatialDyad_GetFieldOfM_topRightMat(btSymmetricSpatialDyad* c_this){
	return (btMatrix3x3*)(&c_this->m_topRightMat);
}

void bullet_btSymmetricSpatialDyad_setIdentity(btSymmetricSpatialDyad* c_this){
	c_this->setIdentity();
}

void bullet_btSymmetricSpatialDyad_setMatrix(btSymmetricSpatialDyad* c_this,btMatrix3x3* topLeftMat,btMatrix3x3* topRightMat,btMatrix3x3* bottomLeftMat){
	btMatrix3x3 const& c_arg_topLeftMat=(btMatrix3x3 const&)(*topLeftMat);
	btMatrix3x3 const& c_arg_topRightMat=(btMatrix3x3 const&)(*topRightMat);
	btMatrix3x3 const& c_arg_bottomLeftMat=(btMatrix3x3 const&)(*bottomLeftMat);
	c_this->setMatrix(c_arg_topLeftMat,c_arg_topRightMat,c_arg_bottomLeftMat);
}

btSpatialTransformationMatrix* bullet_NewbtSpatialTransformationMatrix(){
	btSpatialTransformationMatrix* wrap_out = new btSpatialTransformationMatrix();
	return wrap_out;
}

btMatrix3x3* bullet_btSpatialTransformationMatrix_GetFieldOfM_rotMat(btSpatialTransformationMatrix* c_this){
	return (btMatrix3x3*)(&c_this->m_rotMat);
}

btVector3* bullet_btSpatialTransformationMatrix_GetFieldOfM_trnVec(btSpatialTransformationMatrix* c_this){
	return (btVector3*)(&c_this->m_trnVec);
}

void bullet_btSpatialTransformationMatrix_transformInverse(btSpatialTransformationMatrix* c_this,btSymmetricSpatialDyad* inMat,btSymmetricSpatialDyad* outMat,btSpatialTransformationMatrix::eOutputOperation outOp){
	btSymmetricSpatialDyad const& c_arg_inMat=(btSymmetricSpatialDyad const&)(*inMat);
	btSymmetricSpatialDyad& c_arg_outMat=(btSymmetricSpatialDyad&)(*outMat);
	btSpatialTransformationMatrix::eOutputOperation c_arg_outOp=outOp;
	c_this->transformInverse(c_arg_inMat,c_arg_outMat,c_arg_outOp);
}

btSpatialMotionVector* bullet_NewbtSpatialMotionVector(){
	btSpatialMotionVector* wrap_out = new btSpatialMotionVector();
	return wrap_out;
}

btSpatialMotionVector* bullet_NewbtSpatialMotionVector1(btVector3* angular,btVector3* linear){
	btVector3 const& c_arg_angular=(btVector3 const&)(*angular);
	btVector3 const& c_arg_linear=(btVector3 const&)(*linear);
	btSpatialMotionVector* wrap_out = new btSpatialMotionVector(c_arg_angular,c_arg_linear);
	return wrap_out;
}

void bullet_btSpatialMotionVector_addAngular(btSpatialMotionVector* c_this,btVector3* angular){
	btVector3 const& c_arg_angular=(btVector3 const&)(*angular);
	c_this->addAngular(c_arg_angular);
}

void bullet_btSpatialMotionVector_addLinear(btSpatialMotionVector* c_this,btVector3* linear){
	btVector3 const& c_arg_linear=(btVector3 const&)(*linear);
	c_this->addLinear(c_arg_linear);
}

void bullet_btSpatialMotionVector_addValue(btSpatialMotionVector* c_this,double* ax,double* ay,double* az,double* lx,double* ly,double* lz){
	btScalar const& c_arg_ax=(btScalar const&)(*ax);
	btScalar const& c_arg_ay=(btScalar const&)(*ay);
	btScalar const& c_arg_az=(btScalar const&)(*az);
	btScalar const& c_arg_lx=(btScalar const&)(*lx);
	btScalar const& c_arg_ly=(btScalar const&)(*ly);
	btScalar const& c_arg_lz=(btScalar const&)(*lz);
	c_this->addValue(c_arg_ax,c_arg_ay,c_arg_az,c_arg_lx,c_arg_ly,c_arg_lz);
}

void bullet_btSpatialMotionVector_addVector(btSpatialMotionVector* c_this,btVector3* angular,btVector3* linear){
	btVector3 const& c_arg_angular=(btVector3 const&)(*angular);
	btVector3 const& c_arg_linear=(btVector3 const&)(*linear);
	c_this->addVector(c_arg_angular,c_arg_linear);
}

double bullet_btSpatialMotionVector_dot(btSpatialMotionVector* c_this,btSpatialForceVector* b){
	btSpatialForceVector const& c_arg_b=(btSpatialForceVector const&)(*b);
	btScalar c_out = c_this->dot(c_arg_b);
	double wrap_out = (c_out);
	return wrap_out;
}

btVector3* bullet_btSpatialMotionVector_getAngular(btSpatialMotionVector* c_this){
	btVector3 const& c_out = c_this->getAngular();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btSpatialMotionVector_GetFieldOfM_bottomVec(btSpatialMotionVector* c_this){
	return (btVector3*)(&c_this->m_bottomVec);
}

btVector3* bullet_btSpatialMotionVector_GetFieldOfM_topVec(btSpatialMotionVector* c_this){
	return (btVector3*)(&c_this->m_topVec);
}

btVector3* bullet_btSpatialMotionVector_getLinear(btSpatialMotionVector* c_this){
	btVector3 const& c_out = c_this->getLinear();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

void bullet_btSpatialMotionVector_setAngular(btSpatialMotionVector* c_this,btVector3* angular){
	btVector3 const& c_arg_angular=(btVector3 const&)(*angular);
	c_this->setAngular(c_arg_angular);
}

void bullet_btSpatialMotionVector_setLinear(btSpatialMotionVector* c_this,btVector3* linear){
	btVector3 const& c_arg_linear=(btVector3 const&)(*linear);
	c_this->setLinear(c_arg_linear);
}

void bullet_btSpatialMotionVector_setValue(btSpatialMotionVector* c_this,double* ax,double* ay,double* az,double* lx,double* ly,double* lz){
	btScalar const& c_arg_ax=(btScalar const&)(*ax);
	btScalar const& c_arg_ay=(btScalar const&)(*ay);
	btScalar const& c_arg_az=(btScalar const&)(*az);
	btScalar const& c_arg_lx=(btScalar const&)(*lx);
	btScalar const& c_arg_ly=(btScalar const&)(*ly);
	btScalar const& c_arg_lz=(btScalar const&)(*lz);
	c_this->setValue(c_arg_ax,c_arg_ay,c_arg_az,c_arg_lx,c_arg_ly,c_arg_lz);
}

void bullet_btSpatialMotionVector_setVector(btSpatialMotionVector* c_this,btVector3* angular,btVector3* linear){
	btVector3 const& c_arg_angular=(btVector3 const&)(*angular);
	btVector3 const& c_arg_linear=(btVector3 const&)(*linear);
	c_this->setVector(c_arg_angular,c_arg_linear);
}

void bullet_btSpatialMotionVector_setZero(btSpatialMotionVector* c_this){
	c_this->setZero();
}

btSpatialForceVector* bullet_NewbtSpatialForceVector(){
	btSpatialForceVector* wrap_out = new btSpatialForceVector();
	return wrap_out;
}

btSpatialForceVector* bullet_NewbtSpatialForceVector1(btVector3* angular,btVector3* linear){
	btVector3 const& c_arg_angular=(btVector3 const&)(*angular);
	btVector3 const& c_arg_linear=(btVector3 const&)(*linear);
	btSpatialForceVector* wrap_out = new btSpatialForceVector(c_arg_angular,c_arg_linear);
	return wrap_out;
}

btSpatialForceVector* bullet_NewbtSpatialForceVector2(double* ax,double* ay,double* az,double* lx,double* ly,double* lz){
	btScalar const& c_arg_ax=(btScalar const&)(*ax);
	btScalar const& c_arg_ay=(btScalar const&)(*ay);
	btScalar const& c_arg_az=(btScalar const&)(*az);
	btScalar const& c_arg_lx=(btScalar const&)(*lx);
	btScalar const& c_arg_ly=(btScalar const&)(*ly);
	btScalar const& c_arg_lz=(btScalar const&)(*lz);
	btSpatialForceVector* wrap_out = new btSpatialForceVector(c_arg_ax,c_arg_ay,c_arg_az,c_arg_lx,c_arg_ly,c_arg_lz);
	return wrap_out;
}

void bullet_btSpatialForceVector_addAngular(btSpatialForceVector* c_this,btVector3* angular){
	btVector3 const& c_arg_angular=(btVector3 const&)(*angular);
	c_this->addAngular(c_arg_angular);
}

void bullet_btSpatialForceVector_addLinear(btSpatialForceVector* c_this,btVector3* linear){
	btVector3 const& c_arg_linear=(btVector3 const&)(*linear);
	c_this->addLinear(c_arg_linear);
}

void bullet_btSpatialForceVector_addValue(btSpatialForceVector* c_this,double* ax,double* ay,double* az,double* lx,double* ly,double* lz){
	btScalar const& c_arg_ax=(btScalar const&)(*ax);
	btScalar const& c_arg_ay=(btScalar const&)(*ay);
	btScalar const& c_arg_az=(btScalar const&)(*az);
	btScalar const& c_arg_lx=(btScalar const&)(*lx);
	btScalar const& c_arg_ly=(btScalar const&)(*ly);
	btScalar const& c_arg_lz=(btScalar const&)(*lz);
	c_this->addValue(c_arg_ax,c_arg_ay,c_arg_az,c_arg_lx,c_arg_ly,c_arg_lz);
}

void bullet_btSpatialForceVector_addVector(btSpatialForceVector* c_this,btVector3* angular,btVector3* linear){
	btVector3 const& c_arg_angular=(btVector3 const&)(*angular);
	btVector3 const& c_arg_linear=(btVector3 const&)(*linear);
	c_this->addVector(c_arg_angular,c_arg_linear);
}

btVector3* bullet_btSpatialForceVector_getAngular(btSpatialForceVector* c_this){
	btVector3 const& c_out = c_this->getAngular();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

btVector3* bullet_btSpatialForceVector_GetFieldOfM_bottomVec(btSpatialForceVector* c_this){
	return (btVector3*)(&c_this->m_bottomVec);
}

btVector3* bullet_btSpatialForceVector_GetFieldOfM_topVec(btSpatialForceVector* c_this){
	return (btVector3*)(&c_this->m_topVec);
}

btVector3* bullet_btSpatialForceVector_getLinear(btSpatialForceVector* c_this){
	btVector3 const& c_out = c_this->getLinear();
	btVector3* wrap_out = (btVector3*)(&c_out);
	return wrap_out;
}

void bullet_btSpatialForceVector_setAngular(btSpatialForceVector* c_this,btVector3* angular){
	btVector3 const& c_arg_angular=(btVector3 const&)(*angular);
	c_this->setAngular(c_arg_angular);
}

void bullet_btSpatialForceVector_setLinear(btSpatialForceVector* c_this,btVector3* linear){
	btVector3 const& c_arg_linear=(btVector3 const&)(*linear);
	c_this->setLinear(c_arg_linear);
}

void bullet_btSpatialForceVector_setValue(btSpatialForceVector* c_this,double* ax,double* ay,double* az,double* lx,double* ly,double* lz){
	btScalar const& c_arg_ax=(btScalar const&)(*ax);
	btScalar const& c_arg_ay=(btScalar const&)(*ay);
	btScalar const& c_arg_az=(btScalar const&)(*az);
	btScalar const& c_arg_lx=(btScalar const&)(*lx);
	btScalar const& c_arg_ly=(btScalar const&)(*ly);
	btScalar const& c_arg_lz=(btScalar const&)(*lz);
	c_this->setValue(c_arg_ax,c_arg_ay,c_arg_az,c_arg_lx,c_arg_ly,c_arg_lz);
}

void bullet_btSpatialForceVector_setVector(btSpatialForceVector* c_this,btVector3* angular,btVector3* linear){
	btVector3 const& c_arg_angular=(btVector3 const&)(*angular);
	btVector3 const& c_arg_linear=(btVector3 const&)(*linear);
	c_this->setVector(c_arg_angular,c_arg_linear);
}

void bullet_btSpatialForceVector_setZero(btSpatialForceVector* c_this){
	c_this->setZero();
}

#ifdef __cplusplus
}
#endif
